package com.wxh.multithread;

/**
 * @ClassName: StaticProxy
 * @Description: 静态代理
 * @Author wxh
 * @Date: 2021/12/29 9:25
 * @Version V1.0.0
 * @Since 1.8
 */
public class StaticProxy {
    /**
     * 静态代理：真实对象和代理对象都要实现同一个接口
     * 好处：代理对象可以做真实对象做不了一些事情；真实对象只关注自己做的事情
     * @param args
     */
    public static void main(String[] args) {
        new Thread(() -> System.out.println("代理模式")).start();

        WeddingCompany weddingCompany = new WeddingCompany(new You());
        weddingCompany.happyMarry();
    }
}


interface Marry{
    /**
     * 人生四大喜事:
     *  1. 久旱逢甘霖
     *  2. 他乡遇故知
     *  3. 洞房花烛夜
     *  4. 金榜题名时
     */
    void happyMarry();
}

/**
 *  真实角色
 */
class You implements Marry{

    @Override
    public void happyMarry() {
        System.out.println("小花结婚了，超开心！");
    }
}

/**
 * 代理角色
 */
class WeddingCompany implements Marry{
    /**
     *  代理的目标对象
     */
    private Marry target;

    public WeddingCompany(Marry target){
        this.target = target;
    }

    @Override
    public void happyMarry() {
        before();
        // 真实对象做某事
        this.target.happyMarry();
        after();
    }

    private void before(){
        System.out.println("结婚之前，布置现场");
    }
    private void after(){
        System.out.println("结婚之后，收取尾款");
    }
}